package com.loeng.module.system.service.user;

import com.loeng.framework.common.pojo.PageResult;
import com.loeng.module.system.controller.admin.user.vo.UsersPageReqVO;
import com.loeng.module.system.controller.admin.user.vo.UsersSaveReqVO;
import com.loeng.module.system.dal.dataobject.user.AdminUserDO;

import javax.validation.Valid;
import java.util.List;

/**
 * 后台用户 Service 接口
 * @author loeng zhuo
 */
public interface AdminUserService {

    /**
     * 根据用户名查询用户
     * @param username 用户名
     * @return 用户
     */
    AdminUserDO getUserByUsername(String username);

    /**
     * 验证密码是否匹配
     * @param dataBasePassword 数据库密码
     * @param formPassword 表单密码
     * @return 是否匹配
     */
    boolean isPasswordMatch(String dataBasePassword, String formPassword);

    /**
     * 通过用户 ID 查询用户
     *
     * @param userId 用户ID
     * @return 用户对象信息
     */
    AdminUserDO getUserByUserId(Long userId);

    /**
     * 通过用户 ID 查询用户
     *
     * @param loginUserId 用户ID
     * @return 用户对象信息
     */
    AdminUserDO getUser(Long loginUserId);

    /**
     * 更新用户登录信息
     *
     * @param userId 用户ID
     * @param loginIp 登录IP
     */
    void updateUserLogin(Long userId, String loginIp);

    /**
     * 创建用户信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createUsers(@Valid UsersSaveReqVO createReqVO);

    /**
     * 更新用户信息
     *
     * @param updateReqVO 更新信息
     */
    void updateUsers(@Valid UsersSaveReqVO updateReqVO);

    /**
     * 删除用户信息
     *
     * @param id 编号
     */
    void deleteUsers(Long id);

    /**
     * 获得用户信息
     *
     * @param id 编号
     * @return 用户信息
     */
    AdminUserDO getUsers(Long id);

    /**
     * 获得用户信息分页
     *
     * @param pageReqVO 分页查询
     * @return 用户信息分页
     */
    PageResult<AdminUserDO> getUsersPage(UsersPageReqVO pageReqVO);

    /**
     * 获得用户精简信息列表
     *
     * @param status 状态
     * @return 用户精简信息列表
     */
    List<AdminUserDO> getUserListByStatus(Integer status);

}
